package org.example.projecttwo.entity.enums;

import lombok.Getter;

/**
 * 积分行为枚举
 */
@Getter
public enum PointActionEnum {
    /**
     * 发布文章 +10分 每日上限50分
     */
    PUBLISH_ARTICLE(1, "发布文章", 10, 50),

    /**
     * 发布新闻 +20分 每日上限100分
     */
    PUBLISH_NEWS(2, "发布新闻", 20, 100),

    /**
     * 文章被设为精品 +200分 无上限
     */
    ARTICLE_SET_AS_PREMIUM(3, "文章被设为精品", 200, Integer.MAX_VALUE),

    /**
     * 每日签到 +10分 每日上限10分（即每日只能获得一次）
     */
    DAILY_CHECK_IN(4, "每日签到", 10, 10),

    /**
     * 连续签到7天 +50分 每日上限50分（即每周只能获得一次）
     */
    CONTINUOUS_CHECK_IN_7_DAYS(5, "连续签到7天", 50, 50),

    /**
     * 连续签到30天 +200分 每日上限200分（即每月只能获得一次）
     */
    CONTINUOUS_CHECK_IN_30_DAYS(6, "连续签到30天", 200, 200);

    /**
     * 行为编码
     */
    private final int code;

    /**
     * 行为描述
     */
    private final String description;

    /**
     * 积分值（正数表示增加积分，负数表示扣除积分）
     */
    private final int points;

    /**
     * 每日上限（每日最多可获得的积分）
     */
    private final int dailyLimit;

    PointActionEnum(int code, String description, int points, int dailyLimit) {
        this.code = code;
        this.description = description;
        this.points = points;
        this.dailyLimit = dailyLimit;
    }

    /**
     * 根据编码获取枚举
     *
     * @param code 编码
     * @return PointActionEnum
     */
    public static PointActionEnum fromCode(int code) {
        for (PointActionEnum action : PointActionEnum.values()) {
            if (action.getCode() == code) {
                return action;
            }
        }
        throw new IllegalArgumentException("无效的积分行为编码: " + code);
    }
}